/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cl.dfg.twittersneps;



import cl.dfg.twittersneps.modelo.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import edu.buffalo.sneps.JavaSnepsAPI;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.StringTokenizer;
import net.contentobjects.jnotify.JNotify;
import net.contentobjects.jnotify.JNotifyListener;



/**
 *
 * @author Guillermo
 */
public class FileRW{
    static JavaSnepsAPI api;
    private String content;
    private String line;
    private File file;
    private FileReader fileReader; //permite lectura de archivos
    private FileWriter fileWriter; //permite escritura de archivos
    private BufferedReader br;
    private BufferedWriter bw;
    private Listener listener;

    public FileRW() {
        this.file = null;
        this.fileReader = null;
        this.fileWriter = null;
        this.br = null;
    }

    public String readFile(String path){
        try {
            file = new File(path);
            fileReader = new FileReader(file);
            br = new BufferedReader(fileReader);
            while ((line = br.readLine()) != null) {
                if(content == null){
                    content = line + "\n";
                }
                else{
                    content = content + line + "\n";
                }
            }
            return content;
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return null;
        }
        finally{
            if(fileReader != null){
                try {
                    fileReader.close();
                    content = null;
                } catch (IOException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }
    }

    public String fixUrl(String path){
		
		int point = path.lastIndexOf('\\');
		String pathSubString;
		pathSubString = path.substring(0, point+1);
		return pathSubString;
}


    public String searchRuleFile(String word, String path){
        String rule = "No encontrado";
        int index = 0;
        try {
            file = new File(path);
            fileReader = new FileReader(file);
            br = new BufferedReader(fileReader);
            while ((line = br.readLine()) != null) {
                if(content == null){
                    content = line;
                }
                else{
                    content = content + line;
                }
            }
           
            index = content.indexOf(word);
            //buscamos el substring para identificar la regla
            for(int i=0; i<content.length();i++){                
               
                if(content.substring(index-3, index-1).compareTo("to") == 0){
                    index = content.indexOf(word,index+1);
                }
                else{
                    break;
                }
            }
            
            int cont1 = 0;
            int cont2 = 0;
            for(int i=index-1; i<content.length(); i++){
                
                if(content.charAt(i) == '('){
                    cont1++;
                   
                }
                if(content.charAt(i) == ')'){
                    cont2++;
                   
                }
                if(cont1 == cont2){
                    rule = content.substring(index-1, i);
                   
                    break;
                }
            }
            return rule;
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
            return rule;            
        }
        finally{
            if(fileReader != null){
                try {
                    fileReader.close();
                    content = null;
                } catch (IOException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }
    }

    public void fileMonitoring(String pathfile, String path) throws Exception{
	        // path to watch
	        // watch mask, specify events you care about,
	        // or JNotify.FILE_ANY for all events.
	        int mask = JNotify.FILE_CREATED  |
	                   JNotify.FILE_DELETED  |
	                   JNotify.FILE_MODIFIED |
	                   JNotify.FILE_RENAMED;

	        // watch subtree?
	        boolean watchSubtree = true;
	        // add actual watch
	       int watchID = JNotify.addWatch(path, mask, watchSubtree, new Listener());
	        //Ya que se necesita que monitoree el archivo mientras esta
	        //funcionando la aplicación y no durante un cierto tiempo, es por esta razón
	        //que se comentaron las líneas de código siguientes.
	        // sleep a little, the application will exit if you
	        // don't (watching is asynchronous), depending on your
	        // application, this may not be required
	        //Thread.sleep(60000);

	        // to remove watch the watch
	        //boolean res = JNotify.removeWatch(watchID);
	        //if (!res) {
          // invalid watch ID specified.
        //}

      }
    public List leerLexicon(){

        //System.out.println("ENTRO A LEXICON");
        String palabra;
        String cat;
        String[] content;
        List <Diccionario> palabras = new ArrayList<Diccionario>();
        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            file = new File("C:\\Users\\Franco\\Documents\\NetBeansProjects\\twittersneps\\recursos\\lexicon.lisp");

            fileReader = new FileReader (file);
            br = new BufferedReader(fileReader);

            while((line=br.readLine())!=null){

                content = line.split("\"");
                // content = line.split(")");
                // System.out.println(content[1]);

                palabra = content[1];
                cat = content[2].substring(10,content[2].length()-3);
                Diccionario dic = new Diccionario(palabra,cat);
                palabras.add(dic);
            }

           /* for(int i = 0; i < palabras.size(); i++){
                 System.out.println("Palabra = "+palabras.get(i).getPalabra());
                 System.out.println("Categoria = "+palabras.get(i).getCategoria());
                  System.out.println("=================================");

            }*/

       

        }
        catch(Exception e){
            e.printStackTrace();

        }finally{
             // En el finally cerramos el fichero, para asegurarnos
             // que se cierra tanto si todo va bien como si salta
             // una excepcion.
             try{
                if( null != fileReader ){
                   fileReader.close();
                }
             }catch (Exception e2){
                e2.printStackTrace();
             }
          }

          return palabras;
    }

    public void buscarPalabra(String palabra){


        System.out.println("ENTRO A LA BUSQUEDA CON LA PALABRA :"+palabra);

        for(int i = 0; i < TwittersnepsView.lexicon.size(); i++){

            if(TwittersnepsView.lexicon.get(i).getPalabra().equals(palabra)){

                System.out.println("PALABRA = "+TwittersnepsView.lexicon.get(i).getPalabra());
                System.out.println("CATEGORIA = "+TwittersnepsView.lexicon.get(i).getCategoria());
            }
            else
            {
                System.out.println("Palabra no encontrada!!");
            }


        }




      /*
                Diccionario dic = new Diccionario(palabra,cat);
                palabras.add(dic);
              //  System.out.println(content[2]);
               // System.out.println(content[2].substring(10,content[2].length()-3));


              //  System.out.println(content[0].substring(2,content[0].length()-1));
              //  System.out.println(content[3]);
              StringTokenizer tokens = new StringTokenizer(line);

                while(tokens.hasMoreTokens()){
                    palabras1 = tokens.nextToken();
                    if(palabra.equalsIgnoreCase(palabras1)){
                        palabras1 = tokens.nextToken();
                        palabras1 = tokens.nextToken();
                        encontrado = palabras1;
                 //       System.out.println("PALABRA ENCONTRADA"+palabra);
                 //       System.out.println("\nVALOR BUSCADO "+palabras1);
                        stop=1;
                      //  System.out.println("\n"+linea);

                    }

                    //else
                    //    System.out.println("PALABRA NO ENCONTRADA = "+palabra);
                }
             */



           /* for(int i = 0; i < palabras.size(); i++){
                 System.out.println("Palabra = "+palabras.get(i).getPalabra());
                 System.out.println("Categoria = "+palabras.get(i).getCategoria());
                  System.out.println("=================================");

            }*/






    }

    public void leerGatn() throws FileNotFoundException{

        File file = new File("C:\\Users\\Franco\\Documents\\NetBeansProjects\\twittersneps\\recursos\\gramatica.lisp");
        fileReader = new FileReader (file);
        String line;
        String[] content;
        int flag = 0;
        br = new BufferedReader(fileReader);
        String inicio;
        String ifinal;
        String name;
        List <Regla> reglas = new ArrayList<Regla>();
        List <Regla> l1 = new ArrayList<Regla>();
        try {
        // Apertura del fichero y creacion de BufferedReader para poder
        // hacer una lectura comoda (disponer del metodo readLine()).


            // Lectura del fichero
            while((line=br.readLine())!=null){

              content = line.split(" ");
              if(content[0].indexOf("regla")>0){
                  name = content[2];
                  inicio = content[0].substring(1);
                  ifinal = content[6].substring(0,content[6].length()-3);
                  Regla r = new Regla(inicio,name,ifinal);
                  if(reglas != null){
                  for(int i = 0; i < reglas.size(); i++){
                    if(reglas.get(i).getPadre().equalsIgnoreCase(r.getPadre())){
                        flag = 1;
                    }
                    if(r.getNiRegla().equalsIgnoreCase(reglas.get(i).getNsRegla())){
                        reglas.get(i).addHijo(r);

                       // System.out.println("");
                    }
                  }
                  }
                  if(flag == 0)
                    reglas.add(r);
                  else
                    flag = 0;
              }
            }

           // recorre la lista con las reglas
         /*   for(int i = 0; i < reglas.size(); i++){
               System.out.println("===PADRE====");
               System.out.println("("+reglas.get(i).getNiRegla()+" (cat "+reglas.get(i).getPadre()+" t () (to "+reglas.get(i).getNsRegla()+")))");
               l1 = reglas.get(i).getHijos();
               System.out.println("===HIJOS====");
               for(int x = 0; x < l1.size(); x++){

                   System.out.println("("+l1.get(x).getNiRegla()+" (cat "+l1.get(x).getPadre()+" t () (to "+l1.get(x).getNsRegla()+")))");
               }
            }*/


        }
        catch(Exception e){
            e.printStackTrace();

        }finally{
             // En el finally cerramos el fichero, para asegurarnos
             // que se cierra tanto si todo va bien como si salta
             // una excepcion.
             try{
                if( null != fileReader ){
                   fileReader.close();
                }
             }catch (Exception e2){
                e2.printStackTrace();
             }
          }

       // System.out.println(content);


    }

    public void escribirRegla(String regla){

        try {
            fileWriter = new FileWriter("C:\\Users\\Franco\\Documents\\NetBeansProjects\\twittersneps\\recursos\\gramatica.lisp",true);
            bw = new BufferedWriter(fileWriter);
            bw.write("final del archivo");
            bw.close();
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }


    public void escribirTweets(String tweet){

        PrintWriter pw = null;
    SimpleDateFormat formateador = new SimpleDateFormat("dd'/'MM'/'yyyy", new Locale("es_ES"));
   Date fechaDate = new Date();
   String fecha = formateador.format(fechaDate);
   System.out.println(fecha);
       
        
        try
        {
            fileWriter = new FileWriter("recursos\\tweets.txt",true);
            pw = new PrintWriter(fileWriter);

            
            pw.println(fecha+" "+tweet);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           // Nuevamente aprovechamos el finally para 
           // asegurarnos que se cierra el fichero.
           if (null != fileWriter)
              fileWriter.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }



    }//fin escribirTweets



}//fin clase FileRW
